package com.example.springboottest.example.rabbitmq.pubsub;

import com.example.springboottest.example.rabbitmq.RabbitUtil;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 *  1. 一个生产者，多个消费者；
 *  2. 每个消费者都有自己的队列；
 *  3. 生产者没有直接把消息发送到队列，而是发送到交换机，通过交换机转发到队列；
 * 4. 每个队列都要绑定到交换机上；
 *  5. 生产者发送的消息经过交换机到达队列就能实现一个消息被多个消费者消费；
 * 这里要注意：
 * 1. 在RabbitMQ中交换机没有存储能力，只有队列里面有；
 */
public class RabbitMQPub {
    public static final String EXCHANGE_NAME = "test_topic_exchange_fanout";

    public static void main(String[] args) throws IOException, TimeoutException {

        Connection connection = RabbitUtil.getConnectionFactoryV2().newConnection();
        Channel channel = connection.createChannel();

        //声明交换机
        channel.exchangeDeclare(EXCHANGE_NAME, "fanout");   //并分配

        String msg = "测试pub/sub模式消息";
        channel.basicPublish(EXCHANGE_NAME, "", null, msg.getBytes());

        System.out.println("Send : " + msg);

        channel.close();
        connection.close();
    }
}